La OMS ha dispuesto que para considerarse “saludable” una ciudad debe poseer al menos 15m2 de espacios verdes por habitante, sorprendente y lamentablemente Villa Allende “la entrada de las sierras”, ciudad históricamente reconocida por sus bellos paisajes y su naturaleza, está lejos de ese número.
Por ello el motivo de este proyecto es poder visualizar la relación entre cantidad de habitantes y espacios verdes, buscando determinar cuáles zonas son las más desfaborecidas en esta relación que hace a la calidad de vida. Además compararemos dicha disponibilidad de espacios verdes con otras características socioeconómicas para ver si existe o no relación.
Finalmente, como yapa, incorporaremos las orillas del río actualmente en un estado de lamentable abandono, a fin de observar cuanto impactaría en estos indicadores su recuperación para el uso de los vecinos como espacio verde.
Para el desarrollo de nuestro proyecto utilizaremos las siguientes librerías
library(sf)
library(tidyverse)
library(osmdata)
library(units)
library(leaflet)
library(mapview)
library(ggmap)
library(kableExtra)
library(dplyr)
Para asegurarnos de arrancar con la memoria limpia de datasets viejos utilizamos la librería rm.
rm(list = ls())
Para poder comenzar con nuestro proyecto, primero seleccionamos el bbox correspondiente a la localidad de Villa Allende.
bb_villa <- getbb("Villa Allende, Córdoba")
La definimos como polígono
allende_poly <- getbb("Municipio de Villa Allende, Córdoba", format_out = "sf_polygon")
class(allende_poly)
## [1] "sf" "data.frame"
Además extraeremos un mapa de Villa Allende que usaremos como “Capa Base”. Para ello usaremos los mapas de Stamen Maps.
vabase <- get_stamenmap(bbox = bb_villa,
maptype = "terrain",
zoom=12)
Lo observamos
ggmap(vabase)
La extracción de los polígonos correspondientes a parques y espacios verdes la haremos desde el GeoServicio de OpenStreetmap, previamente realizamos un chequeo e incorporamos parques faltantes pudiendo observar que ciertos espacios como el polideportivo municipal cuyo uso es relevante para este proyecto se encontraban definidos como Sport Centre por lo que decidimos incorporar dicha categoría.
allende <- opq(bb_villa) %>%
add_osm_feature(key = "leisure", value = c("park", "sports_centre"))
allende
## $bbox
## [1] "-31.308457,-64.3248015,-31.2648675,-64.2209538"
##
## $prefix
## [1] "[out:xml][timeout:25];\n(\n"
##
## $suffix
## [1] ");\n(._;>;);\nout body;"
##
## $features
## [1] " [\"leisure\"~\"^(park|sports_centre)$\"]"
##
## attr(,"class")
## [1] "list" "overpass_query"
## attr(,"nodes_only")
## [1] FALSE
Posteriormente a la extracción desde el geoservicio guardamos la información como sf en la variable allende
allende <- allende %>%
osmdata_sf()
allende
De la información extraida seleccionamos solamente los polígonos y los guardamos en la variable allende_plazas
allende_plazas <- allende$osm_polygons
head(allende_plazas)
## Simple feature collection with 6 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -64.30298 ymin: -31.30823 xmax: -64.23171 ymax: -31.26497
## Geodetic CRS: WGS 84
## osm_id name addr.city leisure sport
## 154075693 154075693 Polideportivo Mendiolaza <NA> sports_centre <NA>
## 154244319 154244319 <NA> <NA> park <NA>
## 157802440 157802440 Polideportivo Villa Allende <NA> park <NA>
## 164874619 164874619 ACV <NA> sports_centre motor
## 234370161 234370161 Club Quilmes <NA> sports_centre soccer
## 268203974 268203974 <NA> <NA> park <NA>
## geometry
## 154075693 POLYGON ((-64.30271 -31.264...
## 154244319 POLYGON ((-64.25701 -31.304...
## 157802440 POLYGON ((-64.29269 -31.291...
## 164874619 POLYGON ((-64.2348 -31.2804...
## 234370161 POLYGON ((-64.29927 -31.283...
## 268203974 POLYGON ((-64.28701 -31.307...
Listo! Ahora podemos hacer un mapa, para tener una primera aproximación.
allende_plazas <- st_intersection(allende_plazas, allende_poly)
ggmap(vabase) +
geom_sf(data=allende_poly, inherit.aes = FALSE, fill = NA) +
geom_sf(data = allende_plazas, inherit.aes = FALSE, color = "green")
El mapa refleja lo planteado anteriormente, la proporción de territorio dedicado a espacios verdes en la ciudad es muy baja.
Para mayor información calcularemos las áreas de dichos espacios verdes en m2 y los incorporaremos como una columna más dentro del dataset allende_plazas.
allende_plazas$area <-as.numeric(set_units(st_area(allende_plazas), m^2))
La información vinculada a las características poblacionales de la ciudad puede ser obtenida de la página poblaciones.org realizada por Conicet, la cual sintetiza geográficamente la información proveniente de los últimos censos realizados.
densidad <- st_read("vadensidad1/dataset11601hwr14979.shp")
## Reading layer `dataset11601hwr14979' from data source
## `/home/pedro/Documentos/Drive/Facultad/Geolocalización_en_R/analisis_geoespacial_espaciosverdes/vadensidad1/dataset11601hwr14979.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 31 features and 60 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -64.31595 ymin: -31.30945 xmax: -64.23393 ymax: -31.26561
## Geodetic CRS: WGS 84
head(densidad)
## Simple feature collection with 6 features and 60 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -64.31384 ymin: -31.29116 xmax: -64.27533 ymax: -31.26561
## Geodetic CRS: WGS 84
## REDCODE P_TOTAL P_A17 P_0A3 P_4A5 P_6A12 P_13A17 P_18A P_18A29 P_30A54
## 1 140211905 803 297 45 31 142 79 506 115 290
## 2 140211901 848 257 50 23 108 76 591 151 313
## 3 140211904 604 241 38 21 106 76 363 62 256
## 4 140211801 727 234 67 31 86 50 493 126 270
## 5 140211902 877 264 59 26 112 67 613 154 278
## 6 140211903 570 155 36 12 64 43 415 99 204
## P_55A69 P_70A M_TOTAL M_A17 M_0A3 M_4A5 M_6A12 M_13A17 M_18A M_18A29 M_30A54
## 1 78 23 420 145 24 16 70 35 275 69 156
## 2 84 43 424 119 22 9 51 37 305 79 165
## 3 35 10 303 111 19 10 47 35 192 33 134
## 4 68 29 359 106 27 11 42 26 253 63 140
## 5 117 64 458 135 27 12 57 39 323 79 151
## 6 75 37 285 64 13 8 26 17 221 54 104
## M_55A69 M_70A V_TOTAL V_A17 V_0A3 V_4A5 V_6A12 V_13A17 V_18A V_18A29 V_30A54
## 1 36 14 383 152 21 15 72 44 231 46 134
## 2 36 25 424 138 28 14 57 39 286 72 148
## 3 19 6 301 130 19 11 59 41 171 29 122
## 4 35 15 368 128 40 20 44 24 240 63 130
## 5 57 36 419 129 32 14 55 28 290 75 127
## 6 38 25 285 91 23 4 38 26 194 45 100
## V_55A69 V_70A P18A_SIN_I P18A_PRIMA P18A_SECUN P18A_SOLOP P18A_SOLOS
## 1 42 9 10 495 454 41 212
## 2 48 18 27 552 436 116 223
## 3 16 4 5 354 336 18 130
## 4 33 14 26 462 311 151 182
## 5 60 28 67 540 291 249 196
## 6 37 12 15 398 333 65 154
## P18A_TERCI P18A_UNIVE P4A5_ASIST P6A12_ASIS P1317_ASIS P1317_SIN_ P1829_ASIS
## 1 50 192 30 142 77 78 10
## 2 46 167 22 107 71 75 14
## 3 44 162 19 106 73 76 2
## 4 42 87 25 85 46 50 9
## 5 29 66 19 109 60 67 10
## 6 41 138 10 64 41 42 6
## P1829_SIN_ P1425_ASIS P1425_SIN_ P1425 IDPROV PROV IDDPTO DPTO REDCODE_1
## 1 17 72 77 149 14 Córdoba 14021 Colón 140211905
## 2 33 68 86 173 14 Córdoba 14021 Colón 140211901
## 3 4 60 63 107 14 Córdoba 14021 Colón 140211904
## 4 51 44 79 124 14 Córdoba 14021 Colón 140211801
## 5 83 58 118 164 14 Córdoba 14021 Colón 140211902
## 6 20 39 48 101 14 Córdoba 14021 Colón 140211903
## RADIOS_POB RADIOS_HOG RADIOS_LAT RADIOS_LON RADIOS_SUP
## 1 803 200 -31.27927 -64.28310 1.735
## 2 848 238 -31.27484 -64.29401 0.767
## 3 604 162 -31.27852 -64.28484 0.407
## 4 727 233 -31.28195 -64.30880 0.639
## 5 896 283 -31.28000 -64.30085 0.457
## 6 610 178 -31.28250 -64.29032 1.028
## geometry
## 1 POLYGON ((-64.29099 -31.265...
## 2 POLYGON ((-64.2913 -31.2713...
## 3 POLYGON ((-64.28706 -31.273...
## 4 POLYGON ((-64.30537 -31.280...
## 5 POLYGON ((-64.29955 -31.276...
## 6 POLYGON ((-64.2901 -31.2764...
Nos interesan solo los polígonos, el RADIOCODE y P_TOTAL así que filtramos
densidad <- select(densidad, REDCODE, P_TOTAL, geometry)
Rápidamente podemos calcular el área verde por habitante total.
areaverde <- sum(allende_plazas$area)
p_total <- sum(densidad$P_TOTAL)
verde_porhabitante <- areaverde / p_total
# Creamos un data.frame con esos 3 objetos
tabla = data.frame(areaverde, p_total, verde_porhabitante)
# Cambiamos el nombre de las columnas
tabla = rename(tabla, "Area verde" = areaverde, "Poblacion total" = p_total, "Espacio verde por hab." = verde_porhabitante)
tabla %>%
kbl(caption = "Datos de Espacios verdes Ciudad de Villa Allende en m2" ) %>%
kable_classic(full_width = F, html_font = "Cambria", font_size = 16)
| Area verde | Poblacion total | Espacio verde por hab. |
|---|---|---|
| 285957 | 26961 | 10.60632 |
Hay un total de 285.957 m2 de espacio verde lo que corresponde a un total de 10m2 por habitante. Si bien es considerablemente menor a los 15m2 recomendados por la oms, posee mejores valores que muchas otras ciudades. Sin embargo recordemos que estamos tomando datos poblacionales correspondientes al censo del 2010, hoy la población estimada duplica ese número por lo que la relación espacio verde por habitante disminuyó drásticamente.
Ahora tenemos la información de la densidad poblacional, haremos un coropleth.
ggplot(data = densidad)+
geom_sf(data = allende_poly) +
geom_sf(aes(fill= P_TOTAL))+
scale_fill_viridis_c() +
labs(title = "Población total por radio censal año 2010",
subtitle = "Ciudad de Villa Allende",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")+
theme_void()
El dataset presenta ciertas ventajas y ciertas desventajas que vale la pena aclarar. Como ventaja está el hecho de que los radios censales coinciden aproximadamente con los límites de los barrios, digo aproximadamente porque hay excepciones leves, esto podemos saberlo porque por ser vecinos de la ciudad conocemos los límites y formas de los barrios. La desventaja está en el hecho de que por ser datos correspondientes al censo del 2010 existen zonas no delimitadas como pobladas que hoy en día se encuentran no solo pobladas sino que su población es importante, ya que coincide con el proceso de expanción y desarrollo inmobiliario de la ciudad. Dichas zonas son las que figuran en blanco
Ahora observaremos como se ve el mapa de los radios censales de la ciudad y los espacios verdes
ggplot()+
geom_sf(data = allende_poly) +
geom_sf(data = densidad$geometry) +
geom_sf(data = allende_plazas, fill = "green") +
labs(title = "Espacios verdes por radio censal año 2010",
subtitle = "Ciudad de Villa Allende",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org")+
theme_void()
La escala no ayuda así que utilizaremos un tipo de mapa interactivo
mapview(allende_plazas) +
mapview(densidad$geometry, fill = NA)
Ahora cruzaremos dicho mapa con el mapa de cantidad de población
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = densidad, aes(fill = P_TOTAL)) +
geom_sf(data = allende_plazas, fill = "green") +
labs(title = "Población total y espacios verdes por radio censal año 2010",
subtitle = "Ciudad de Villa Allende",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")+
theme_void()
bin0 <- c(0,250, 500, 750, 1000, 1500, Inf)
binpal <- colorBin("RdYlGn", densidad$P_TOTAL, bins = bin0, pretty = FALSE, reverse = TRUE)
leaflet() %>%
setView(lng = -64.29207, lat = -31.29080, zoom = 13) %>%
addTiles() %>%
addPolygons(data=densidad, stroke=FALSE, smoothFactor = 0.2, fillOpacity = .8,
color = ~binpal(P_TOTAL)) %>%
addPolygons(data = allende_plazas, fill = "green") %>%
addLegend(values = densidad$P_TOTAL, pal = binpal, title = "Población total por radio censal")
Muy interesante el mapa nos permite ver rápidamente sin avanzar en muchos cálculos que dos de los radios más poblados no poseen ninguna plaza!!
Hasta el momento pudimos hacer una primera aproximación en este proceso de tratar de entender cómo se presenta la disponibilidad de espacios verdes en la ciudad de Villa Allende. Ahora bien, a fin de profundizar el análisis y continuando con el criterio planteado por la OMS sobre la disponibilidad de espacios verdes por cantidad de habitantes, veremos como se da esta relación en cada uno de los radios censales. Para ello haremos un dataset filtrando las columnas que nos interesan de densidad e incorporando en el mismo una columna donde registre la cantidad de plazas que caen en su interior. Finalmente incorporaremos una última columna donde sume los m2 de cada plaza correspondientes a cada radio censal.
Para quienes no conocen la ciudad de Villa Allende podrán rápidamente detectar que hay un gran polígono verde en el centro norte de la ciudad no delimitado, pero el mismo corresponde al Golf Club el cual no es público y por lo tanto no puede ser utilizado sino por socios, distinto es el caso del gran espacio verde de la zona sureste el cual se encuentra dentro del Country San Isidro por lo que no es accesible al total de la población pero siguiendo el criterio de usabilidad por parte de los vecinos del mismo barrio, el mismo está disponible para todos los vecinos que viven allí por lo que fue considerado pertinente.
a <- st_join(allende_plazas, densidad, join = st_within)
a <- a %>%
group_by(REDCODE) %>%
summarise(cantidad = n(), area_verde = sum(area, na.rm = TRUE)) %>%
st_set_geometry(NULL)
Hacemos un left join para incorporar la información en densidad
densidad <- left_join(densidad, a)
Ahora graficamos!
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data=densidad, aes(fill= cantidad)) +
scale_fill_viridis_c() +
theme_void() +
labs(title = "Cantidad de espacios verdes por radio censal",
subtitle = "Ciudad de Villa Allende",
fill = "Plazas por radio censal",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")
Se puede observar que hay muchos barrios sin plazas, 7 según los resultados visibles en el dataset generado.
Ahora para calcular el “area verde” por habitante creamos una nueva columna que divida area_verde sobre cantidad de habitantes del radio censal
densidad$verdepor_habitante <- densidad$area_verde / densidad$P_TOTAL
Ahora veamos como se ve el gráfico en funcion del “área verde” por habitante
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data=densidad, aes(fill= verdepor_habitante)) +
scale_fill_viridis_c() +
theme_void() +
labs(title = "Cantidad de m2 verdes por habitante por cada radio censal",
subtitle = "Ciudad de Villa Allende",
fill = "M2 verdes por habitante",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")
Lo mismo pero en interactivo!
bin <- c(0, 1, 5, 10, 15, 20, 40, Inf)
paleta <- colorBin("RdYlGn", domain = densidad$verdepor_habitante, bins = bin, pretty = FALSE, reverse = FALSE)
leaflet() %>%
setView(lng = -64.29207, lat = -31.29080, zoom = 13) %>%
addTiles() %>%
addPolygons(data=densidad, stroke=FALSE, smoothFactor = 0.2, fillOpacity = .8,
color = ~paleta(verdepor_habitante)) %>%
addPolygons(data = allende_plazas, fill = "green") %>%
addLegend(values = densidad$verdepor_habitante, pal = paleta, title = "Espacio verde por habitante en m2")
Bien ya observamos que hay radios que tienen varios espacios verdes, otros que tienen pocos y directamente algunos que no tienen.
Ahora tratando de ampliar un poco el criterio consideraremos la disancia al espacio verde más cercano. Para ello calcularemos el centroide de cada radio censal y de cada plaza, para luego calcular la distancia con st_nearest_feature
plazas_c <- st_point_on_surface(allende_plazas)
radios_c <- st_point_on_surface(densidad)
densidad <- densidad %>% #Tomamos de base el df densidad que contiene los poligonos de radios censales
mutate(distancia=st_distance(radios_c, plazas_c[st_nearest_feature(radios_c, plazas_c),], by_element = TRUE)) %>% #Agregamos columna nueva con los valores del calculo de distancia entre centroidoes ;)
mutate(distancia=as.numeric(distancia)) #Convertimos a número
Ahora graficamos
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = densidad, aes(fill = distancia), color = NA) +
scale_fill_viridis_c() +
labs(title = "Distancia a plaza más cercana",
subtitle = "Ciudad Villa Allende",
fill = "Distancia a plaza más cercana en m",
caption = "Elaboración propia en base a datos de OpenStreetmap y Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")+
theme_void()
En interactivo.
bins <- c(0,50,100,250,500,1000,1500, Inf)
palet <- colorBin("RdYlGn", densidad$distancia, bins = bins, pretty = FALSE, reverse = TRUE)
leaflet() %>%
setView(lng = -64.29207, lat = -31.29080, zoom = 13) %>%
addTiles() %>%
addPolygons(data=densidad, stroke=FALSE, smoothFactor = 0.2, fillOpacity = 0.85,
color = ~palet(distancia)) %>%
addLegend(values = densidad$distancia, pal = palet, title = "Distancia a la plaza más cercana en m")
Este gráfico es sumamente interesante, puesto que nos permite observar que las zonas céntricas, si bien concentran la mayor cantidad de población son quienes poseen los espacios verdes más cerca, bastante similar a muchas otras ciudades.
A quienes venimos de las ciencias sociales nos encanta preguntarnos cómo influyen los factores socioeconómicos en casi todas las demás variables a analizar, pero salvando el vicio profesional es súmamente interesante ver si la desigualdad en el acceso a espacios verdes (considerándolos como dijimos factores de la salud pública y la calidad de vida de la población) reproduce otro tipo de desigualdades. Para ello observaremos si existe o no relación entre la disponibilidad de espacios verdes, Necesidades Básicas y Estrato socioeconómico, ambos dataset obtenidos también de poblaciones.org
va_nbi <- st_read("vanbi/dataset8301hwr14979.shp")
## Reading layer `dataset8301hwr14979' from data source
## `/home/pedro/Documentos/Drive/Facultad/Geolocalización_en_R/analisis_geoespacial_espaciosverdes/vanbi/dataset8301hwr14979.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 31 features and 38 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -64.31595 ymin: -31.30945 xmax: -64.23393 ymax: -31.26561
## Geodetic CRS: WGS 84
va_socioec <- st_read("villaallende_socioec/dataset19901hwr14979.shp")
## Reading layer `dataset19901hwr14979' from data source
## `/home/pedro/Documentos/Drive/Facultad/Geolocalización_en_R/analisis_geoespacial_espaciosverdes/villaallende_socioec/dataset19901hwr14979.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 29 features and 199 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -64.31595 ymin: -31.30945 xmax: -64.26885 ymax: -31.26561
## Geodetic CRS: WGS 84
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = va_nbi, aes(fill = H_NBI/H_TOTAL *100), color = NA) +
scale_fill_viridis_c() +
labs(title = "Porcentaje de hogares con al menos una NBI",
subtitle = "Ciudad Villa Allende",
fill = "Hogares con al menos una NBI",
caption = "Elaboración propia en base a datos de Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")+
theme_void()
Sumamente interesante la comparativa! podemos ver que existe muy poca relación ya que por ejemplo los radios de la zona norte son quienes poseen menor porcentaje de hogares con al menos una nbi (y corresponden a los barrios más adinerados de la ciudad) son al mismo tiempo quienes poseen más lejos la plaza más cercana. Pero tampoco podemos afirmar una correlación inversa ya que los radios del sur con un porcentaje medio de hogares con nbi les siguen en lejanía a las plazas más cercanas.
Veremos como se comporta con respecto al dataset de estrato socio económico
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = va_socioec, aes(fill = SEGMENTO), color = NA) +
scale_fill_viridis_c() +
labs(title = "Estrato socioeconómico de cada radio censal",
subtitle = "Ciudad Villa Allende",
fill = "Estrato socioeconómico",
caption = "Elaboración propia en base a datos de Poblaciones.org \nlas zonas en blanco no poseían población registrada hasta 2010")+
theme_void()
De los metadatos del dataset sabemos que los valores de la columna Segmento socioeconómico del radio corresponden a 1:Clase alta 2:Clase media alta 3:Clase media 4:Clase media baja 5:Populares 6:Muy pobres 7:Indigente 99:Disperso
table(va_socioec$SEGMENTO)
##
## 1 2 3 4 5 6 7
## 4 5 5 9 2 1 3
va_socioec$estrato <- as.factor(va_socioec$SEGMENTO)
str(va_socioec$estrato)
## Factor w/ 7 levels "1","2","3","4",..: 1 4 1 4 4 1 7 5 4 2 ...
va_socioec$estrato <- factor(va_socioec$estrato,
levels = levels(va_socioec$estrato),
labels = c("Clase alta", "Clase media alta", "Clase media", "Clase media baja", "Populares", "Muy pobres", "Indigente"))
table(va_socioec$estrato)
##
## Clase alta Clase media alta Clase media Clase media baja
## 4 5 5 9
## Populares Muy pobres Indigente
## 2 1 3
Categorizaremos también la distancia a la plaza más cercana. Para ello primero hacemos un join con el dataset densidad donde teníamos guardada la columna distancia
va_socioec <- select(va_socioec, REDCODE, SEGMENTO, estrato)
va_socioec <- st_join(densidad, va_socioec)
Luego creamos una columna con los valores categorizados de la distancia usando cut
va_socioec$dist_plaza <- cut(va_socioec$distancia,
breaks = c(0, 100, 500, 750, 1000, Inf),
labels = c("Muy Cerca", "Cerca", "Media", "Lejos", "Muy lejos"),
right = FALSE)
lab <- c("Clase alta", "Clase media alta", "Clase media", "Clase media baja", "Populares", "Muy pobres", "Indigente")
bin1 <- c(1,2,3,4,5,6,7)
paletaa <- colorBin("viridis", va_socioec$SEGMENTO, bins = bin1, pretty = FALSE)
leaflet() %>%
setView(lng = -64.29207, lat = -31.29080, zoom = 13) %>%
addTiles() %>%
addPolygons(data=va_socioec, stroke=TRUE, smoothFactor = 0.2, fillOpacity = .8,
color = ~paletaa(SEGMENTO),
highlight = highlightOptions(weight = 3, color = "red", bringToFront = TRUE),
popup = ~paste0("Distancia plaza: ",va_socioec$dist_plaza, "<br/>", "Estrato social: ",va_socioec$estrato))
Como consideraciones respecto al gráfico anterior, hay radios censales en los que el dataset de poblaciones.org no muestra registros que corresponden a los dos barrios cerrados situados sobre la av. Padre Luchesse al sureste, sin embargo por las características socioeconómicas de los mismos corresponderían a los denominados clase alta.
Vamos a calcular qué impacto tendría la recuperación de la cuenca del río y sus orillas como espacio verde para ser utilizado y aprovechado por los vecinos En este sentido utilizando el mapa de riesgo generado por IDECOR donde clasifica las zonas de la cuenca del río por ser más o menos inundables, consideramos como criterio seleccionar la zona cuyo riesgo de inundación es alto, entendiendo que debería ser esta la que se transforme en espacio verde mejorando así los indicadores de m2 verde por habitante que venimos trabajando y disminuyendo además las potencialidad de consecuencias trágicas en una eventual inundación ya que el sector altamente inundable que pasaría a ser espacio verde, funcionaría también como “zona de absorción”.
Para ello primero descargamos la información relativa a la cuenca del río
rio <- st_read("WFS:https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/Villa_Allende_Riesgo_Inundacion/wfs?getcapabilities")
## Reading layer `idecor:Villa_Allende_Riesgo_Inundacion' from data source
## `WFS:https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/Villa_Allende_Riesgo_Inundacion/wfs?getcapabilities'
## using driver `WFS'
## Simple feature collection with 3 features and 3 fields
## Geometry type: MULTISURFACE
## Dimension: XY
## Bounding box: xmin: 4374700 ymin: 6536040 xmax: 4377250 ymax: 6540300
## Projected CRS: POSGAR 98 / Argentina 4
Lo transformamos a WGS 84
rio <- st_transform(rio, crs = st_crs(3857))
rio
## Simple feature collection with 3 features and 3 fields
## Geometry type: MULTISURFACE
## Dimension: XY
## Bounding box: xmin: -7159625 ymin: -3672889 xmax: -7156647 ymax: -3667897
## Projected CRS: WGS 84 / Pseudo-Mercator
## gml_id grado descripción
## 1 Villa_Allende_Riesgo_Inundacion.1 2 Medio
## 2 Villa_Allende_Riesgo_Inundacion.2 3 Alto
## 3 Villa_Allende_Riesgo_Inundacion.3 1 Bajo
## geom
## 1 MULTISURFACE (POLYGON ((-71...
## 2 MULTISURFACE (POLYGON ((-71...
## 3 MULTISURFACE (POLYGON ((-71...
Ahora vamos a ver como se ve junto al mapa de Villa Allende
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = rio, aes(fill = descripción)) +
geom_sf(data = allende_plazas, fill= "orange") +
geom_sf(data = densidad, fill= NA) +
theme_void()
Observamos que la cuenca del río cubre una gran superficie de la ciudad, ahora bien nos interesa seleccionar solo la zona de alto riesgo.
zonainund <- rio[rio$descripción == "Alto",]
ggplot() +
geom_sf(data = allende_poly) +
geom_sf(data = allende_plazas, fill= "green") +
geom_sf(data = densidad, aes(fill = P_TOTAL)) +
geom_sf(data = zonainund, colour = "green", fill = "lightgreen", fillOpacity = .001) +
theme_void()
Listo! Podemos observar a simple vista cuánto espacio verde ganaría la ciudad si transformara la zona altamente inundable en parques! Además vemos que este sector del río abarca las zonas más pobladas de la ciudad.
Ahora vamos a calcularlo
rio$area_rio <- as.numeric(set_units(st_area(rio), m^2))
areainund <- as.numeric(set_units(st_area(zonainund), m^2))
# Creamos un data.frame con esos 3 objetos
tabla2 = data.frame(areainund, areaverde)
# Cambiamos el nombre de las columnas
tabla2 = rename(tabla2, "Area verde" = areaverde, "Area Inundable" = areainund)
tabla2 %>%
kbl(caption = "Espacios verdes y zona inundable Ciudad de Villa Allende en m2" ) %>%
kable_classic(full_width = F, html_font = "Cambria", font_size = 16)
| Area Inundable | Area verde |
|---|---|
| 1654799 | 285957 |
Veamoslo en proporción y por habitante
propor <- areainund/areaverde *100
area_total_porhabitante <- (areainund + areaverde) / p_total
tabla3 = data.frame(areaverde, areainund, propor, area_total_porhabitante)
tabla3 = rename(tabla3, "Area verde" = areaverde, "Area Inundable" = areainund, "Espacio verde total por hab." = area_total_porhabitante, "Proporción" = propor)
tabla3 %>%
kbl(caption = " Espacios verdes y zona Inundable Ciudad de Villa Allende en m2" ) %>%
kable_classic(full_width = F, html_font = "Cambria", font_size = 16)
| Area verde | Area Inundable | Proporción | Espacio verde total por hab. |
|---|---|---|---|
| 285957 | 1654799 | 578.6883 | 71.98384 |
Impactante, incorporar el área inundable implicaría un 578% más de espacios verdes y llevaría a tener 71m2 verdes por habitante, ¿un sueño no?
Queda pendiente ver cómo se comportaría por radio censal, he probado varias cuestiones pero no he podido resolver el problema vinculado a que el polígono del río aparece como desconocido. Si pudieran brindarme alguna sugerencia para poder hacer un st_join y cuantificar qué área de la costa del río cae en cada radio censal a fin de sumarla como espacio verde y ver como impactaría en la cantidad de espacios verdes de cada uno se los agradecería mucho!
# #zonainund <- st_transform(zonainund, crs = st_crs(4326))
#
# radios <- select(densidad, REDCODE, geometry) %>%
# st_transform(radios, crs = st_crs(3857))
# nvodf <- st_intersection(radios, zonainund)
Desde aquí muchísimas gracias por el curso la verdad que fué sumamente enriquecedor y me voy muy contento con lo aprendido y con ganas de seguir aprendiendo! Abrazo gigante!